package com.demo.demo.reflect;

import com.demo.demo.entity.Person;

import java.lang.reflect.Constructor;

public class reflect {
    /**
     *获取class的方式
     * 1.Class。forName()方式，字节码阶段（多用于配置文件，讲类名定义在配置文件中。读取文件，加载类）
     * 2.类名.calss，通过类名的属性获取Class（多用于参数的传递）
     * 3.对象.getClass（）方法在object类种定义着（多用于对象的获取字节码的方式）
     *
     * 同一个字节码文件在一次程序运行过程中，只会被加载一次 不论哪一种方式获取的都是一样的
     */
    public static void main(String[] args) throws Exception {
        //第一种
        Class cls = Class.forName("com.demo.demo.reflect.reflect");
        System.out.println(cls);
        //第二种
        Class cls2 = reflect.class;
        System.out.println(cls2);
        //第三种
        reflect reflect = new reflect();
        Class cls3 = Person.class;
        System.out.println(cls3);
        Constructor[] constructor = cls3.getDeclaredConstructors();
        constructor[0].setAccessible(true);
        Person person =(Person) constructor[0].newInstance();
        System.out.println(person);
    }


}
